package com.sxhuangjiang.websocketdemo.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sxhuangjiang.websocketdemo.websocket.TopicServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * 业务系统中，某一个或一些Service业务代码。
 * @author huang
 * @version V1.0
 * @date 2019-12-03 9:27
 */
@Service
@EnableScheduling
@Slf4j
public class BusinessService {


    /**
     * 此定时任务是为了模拟业务系统中无时无刻可能产生的我们自定义的通知情况，出现需要推送的内容时
     * 调用TopicServer.pushMessage 方法将其发送到所有“订阅” “绑定”到/ws/topic的客户端上。
     * @throws JsonProcessingException
     */
    @Scheduled(fixedRate = 5000)
    public void tryLogin() throws JsonProcessingException {
        log.debug("启动测试定时任务-------");
        List<Map<String,String>> list = new ArrayList<>();
        Map<String,String> oneAlarm = new HashMap<>();
        oneAlarm.put("type","alarm");
        oneAlarm.put("description","来自黑名单IP的终端机试图登录后台管理系统！"
                + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        Map<String,String> oneError = new HashMap<>();
        oneError.put("type","error");
        oneError.put("description","系统严重错误！设置的黑名单IP地址仍能尝试登录。"
                + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        list.add(oneAlarm);
        list.add(oneError);
        ObjectMapper mapper = new ObjectMapper();
        //关键所在，通过调用此方法，可以实现推送到客户端，将前端内容刷新。
        TopicServer.pushMessage(mapper.writeValueAsString(list));
    }

}
